Exactly once delivery
あるシステムから別のシステムへメッセージを送信する場合、そのメッセージは正確に一度だけ相手のシステムに到達すること
Martin Kleppmann
は著書
データ指向アプリケーションデザイン
の中で、この言葉は
Effectively Once Processing
と言い換えるべきだと書いている
仕組み
メッセージ
を送信した
システム
が
ACK
を得る前にダウンした場合、同じメッセージを再び生成する
中間に位置するブローカーは重複排除が必要
メッセージの
コンシューマ
(受信者)が、受信したメッセージに対するACKを送信する前に死んでしまうと、再び同じメッセージを受信することになる
Idempotency
が必要
システム全体を見ると、コンシューマは同じメッセージを複数回受け取りうるが、処理は一度だけにして後から受け取ったメッセージに副作用が出ないようにする